// Класс PageManager - управляет страницами,
// т.е. его главной задачей остается инициализация страниц
// связывание страниц с WebDriver
package ru.st.selenium.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;

public class PageManager {

  

private WebDriver driver;

  public LoginPage loginPage;
  public User User;
  public ExternalResources  ExternalResources;
  public Uniontasks  Uniontasks;
  public Unionmessagenew Unionmessagenew;
  public Gantt Gantt;
  public Tasks Tasks;
  public Archivetasksgrid Archivetasksgrid;
  public Formycontrol Formycontrol;
  public TypesObjectPage typesObjectPage;
  public Pwd Pwd;
  public EditFieldsTypesObjectPage editFieldsTypesObjectPage;
  public UsersAndDepartmentPage usersAndDepartmentPage;

  public PageManager(WebDriver driver) {
    this.driver = driver;
    loginPage = initElements(new LoginPage(this));
    ExternalResources = initElements(new ExternalResources(this));
    Uniontasks = initElements(new Uniontasks(this));
    Unionmessagenew = initElements(new Unionmessagenew(this));
    Gantt = initElements(new Gantt(this));
    Tasks = initElements(new Tasks(this));
    Archivetasksgrid = initElements(new Archivetasksgrid(this));
    Formycontrol = initElements(new Formycontrol(this));
    User = initElements(new User(this));
    typesObjectPage = initElements(new TypesObjectPage(this));
    Pwd = initElements(new Pwd(this));
    editFieldsTypesObjectPage = initElements(new EditFieldsTypesObjectPage(this));
    usersAndDepartmentPage = initElements(new UsersAndDepartmentPage(this));
  }
  
  private <T extends Page> T initElements(T page) {
		// Стандартный механизм PageFactory, инициализирует элементы, т.о. что
		// их поиск осуществялется с использованием неявных ожиданий
		// PageFactory.initElements(driver, page);
		// ... явные ожидания
		// PageFactory.initElements(new AjaxElementLocatorFactory(driver, 10),
		// page);
		// Инициализация страниц (элементов), т.е. тут передаем ссылку на
		// драйвер - driver
		// И ссылку на объект страницу - page И будет ждать пока элемент на
		// странице станет Видимым
		// для пользователя
    PageFactory.initElements(new DisplayedElementLocatorFactory(driver, 10), page);
    return page;
  }
  
  public WebDriver getWebDriver() {
    return driver;
  }

}